package stage1.operation.module4;

import java.io.*;
import java.nio.file.Files;
import java.util.Scanner;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

public class Task {
    public static void main(String args[]) {
        try {
            task2();
            task3();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 2. 实现将指定目录中的所有内容删除，包含子目录中的内容都要全部删除
     * 因为要删除指定目录下的，指定目录就不删除了
     */
    public static void task2() throws IOException {
        createTestFile("lg/test/f", "tt1");
        createTestFile("lg/test", "tt2");
        System.out.println("测试数据创建成功，请确认后按任意键删除文件");
        new Scanner(System.in).next();
        deleteFile(new File("lg"));
    }

    /**
     * 创建测试文件
     *
     * @param dir
     * @param fileName
     * @throws IOException
     */
    public static void createTestFile(String dir, String fileName) throws IOException {
        new File(dir).mkdirs();
        new File(dir + "/" + fileName).createNewFile();
        BufferedWriter bw = new BufferedWriter(new FileWriter(dir + "/" + fileName));
        bw.write(fileName);
        bw.newLine();
        bw.close();
    }

    /**
     * 删除文件爱你
     *
     * @param file
     */
    private static void deleteFile(File file) {
        File[] filesArray = file.listFiles();
        for (File tf : filesArray) {
            String name = tf.getName();
            if (tf.isFile()) {
                tf.delete();
                System.out.println(name + "删除成功！");
            }
            if (tf.isDirectory()) {
                // 如果只删除文件，这块可以注释掉
                deleteFile(tf);
                System.out.println(name + "删除成功！");
                tf.delete();
            }
        }
        // 如果要删除这个目录，打开即可
        // file.delete();
    }

    /**
     * 3. 使用线程池将一个目录中的所有内容拷贝到另外一个目录中，包含子目录中的内容。
     */
    public static void task3() throws IOException {
        ExecutorService executorService = Executors.newFixedThreadPool(10);
        executorService.submit(new FileCopyThreadTask());
        executorService.shutdown();
    }

    /**
     * 复制文件夹，文件
     *
     * @param sourcePath
     * @param targetPath
     * @throws IOException
     */
    public static void copyFolder(String sourcePath, String targetPath) throws IOException {
        File sourceFile = new File(sourcePath);
        File targetFile = new File(targetPath);
        if (!targetFile.exists()) {
            targetFile.mkdirs();
        }

        File[] files = sourceFile.listFiles();
        for (int i = 0; i < files.length; i++) {
            if (files[i].isFile()) {
                File targetFilePath = new File(targetPath + "/" + files[i].getName());
                if (!targetFilePath.exists()) {
                    Files.copy(files[i].toPath(), targetFilePath.toPath());
                }
                continue;
            }
            copyFolder(sourcePath + "/" + files[i].getName(), targetPath + "/" + files[i].getName());
        }
    }
}
